home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / misc / frefs11.lha / FetchRefs / Rexx / GoFetchRefs.ced < prev    next >
Text File  |  1994-10-28  |  3KB  |  120 lines

  1. /*  $VER: GoFetchRexx.ced 1.1 (28.10.94)
  2. **
  3. **   ARexx script to invoke FetchRefs from CygnusEd.
  4. */
  5.  
  6. OPTIONS RESULTS
  7. OPTIONS FAILAT 20
  8. caller = ADDRESS()
  9.  
  10. /* Static part of the editor's ARexx port name. That is, the name before any
  11.  * suffixes (like '.1') are appended.
  12.  */
  13. editorname = 'rexx_ced'
  14.  
  15. /* Exit if we're not called from the editor */
  16. IF (LEFT(caller, LENGTH(editorname)) ~= editorname) then
  17.     EXIT 10
  18.  
  19. /* Get the current word from the editor. */
  20.  
  21. /* Account for tabs */
  22. Status 8
  23. tabsize = result
  24. Menu 2 1 0
  25.  
  26. /* Get some data from the editor (line contents and cursor position) */
  27. Status 55
  28. line = result
  29. Status 46
  30. position = result + 1
  31.  
  32. /* Set tab size back */
  33. Menu 2 1 tabsize-1
  34.  
  35. /* Isolate the actual word */
  36. function = line
  37. function = RIGHT(function, LENGTH(function) - position + 1)
  38. cutat = VERIFY(function, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_#?")
  39.  
  40. IF cutat > 0 THEN
  41.     function = LEFT(function, cutat - 1)
  42.  
  43. /* Define a temporary filename to put the reference into */
  44. basename = 'FetchedReference'
  45. filename = 'T:'basename
  46.  
  47. /* It doesn't matter whether we want a taglist, varargs og whatever function */
  48. IF RIGHT(function, 7) = "TagList" THEN
  49.     function = LEFT(function, LENGTH(function) - 7)
  50. ELSE IF RIGHT(function, 4) = "Tags" THEN
  51.     function = LEFT(function, LENGTH(function) - 4)
  52. ELSE IF RIGHT(function, 1) = "A" THEN
  53.     function = LEFT(function, LENGTH(function) - 1)
  54.  
  55. /* Call FetchRefs to get the reference cut out to a temporary file */
  56. ADDRESS 'FETCHREFS'
  57. FR_GET function || '(%|Tags|TagList|A)' filename CASE FILEREF
  58. gotoline = rc2
  59.  
  60. /* Address editor again to load the file or report error */
  61. ADDRESS VALUE caller
  62.  
  63. IF rc ~= 0 THEN DO
  64.         /* Skip if the error was '.....!'. This occours whenever the 'select
  65.          * from what file' window is closed, which is not really an error, so 
  66.          * I don't want it reported.
  67.          */
  68.         IF RIGHT(rc2, 1) = '!' THEN
  69.             EXIT 0
  70.  
  71.         /* Report the error (obtained from FetchRefs) in the editor. This is
  72.          * again editor dependant; either put up a requester, change the
  73.          * title or do nothing - depending on your possibilities and likes.
  74.          */
  75.         'okay1' RC2
  76.  
  77.         EXIT 0 
  78. END
  79. ELSE DO
  80.         /* Make the editor open a new window and load the autodoc into it. */
  81.         CALL GetAView
  82.         'Open' filename
  83.         'Editable file'
  84.         IF gotoline ~= 0 THEN
  85.             'jump to line' gotoline
  86.  
  87.         /* Delete the autodoc file */
  88.         ADDRESS COMMAND 'C:Delete >NIL:' filename
  89.  
  90.         EXIT 0
  91. END
  92.  
  93. /* GetAView - finds a previously used view or opens a new if necessary.
  94.  * This trick requires that the same file name is used for all references.
  95.  * This routine is specific to CygnusEd.
  96.  */
  97. GetAView:
  98.     /* Get number of views */
  99.     'Status 66'
  100.     views = RESULT
  101.  
  102.     /* Try to find a previously used view */
  103.     DO WHILE (views > 0)
  104.         'Status 21'
  105.         viewname = RESULT
  106.         IF (viewname = basename) THEN
  107.             /* This is it. Break the loop */
  108.             views = -1
  109.         ELSE
  110.         DO
  111.             /* Try the next one */
  112.             views = views - 1
  113.             'Next View'
  114.         END
  115.     END
  116.     /* Open a new view if we have to */
  117.     IF (views = 0) THEN
  118.         'Open New'
  119. RETURN
  120.